trò chơi Cannon Siege miễn phí
12.307 lượt xem;
- GameplayController.cs
- Game Controller /
- Scripts /
- Assets /
- project /
1 using System.Collections;
2 using System.Collections.Generic;
3 using UnityEngine;
4 using System.Linq;
5 using UnityEngine.UI;
6 using UnityEngine.SceneManagement;
7
8 public class GameplayController : MonoBehaviour {
9
10 public static GameplayController instance;
11
12 public bool gameInProgress;
13 public Transform player;
14 public CameraFollow camera;
15 public Text scoreText, shotText, highscore;
16 public GameObject gameOverPanel, gameWinPanel, pausePanel;
17
18 [HideInInspector]
19 public bool lastShot;
20
21 private bool gameFinished, checkGameStatus;
22 private List<GameObject> enemies;
23 private List<GameObject> objects;
24 private float timeAfterLastShot, distance, time, timeSinceStartedShot;
25 private int prevLevel;
26
27 void Awake(){
28 CreateInstance ();
29 }
30
31 // Use this for initialization
32 void Start () {
33 InitializeVariables ();
34
35 if (GameController.instance != null && MusicController.instance != null) {
36 if (GameController.instance.isMusicOn) {
37 MusicController.instance.GameplaySound ();
38 } else {
39 MusicController.instance.StopAllSounds ();
40 }
41 }
42
43 }
44
45 // Update is called once per frame
46 void Update () {
47 if (gameInProgress) {
48 GameIsOnPlay ();
49 DistanceBetweenCannonAndBullet ();
50 }
51
52
53 if(GameController.instance != null){
54 UpdateGameplayController ();
55 }
56
57 }
58
59 void CreateInstance(){
60 if(instance == null){
61 instance = this;
62 }
63 }
64
65 void UpdateGameplayController(){
66 scoreText.text = GameController.instance.score.ToString("N0");
67 shotText.text = "X" + PlayerBullet ();
68 }
69
70 void InitializeVariables(){
71 gameInProgress = true;
72 enemies = new List<GameObject> (GameObject.FindGameObjectsWithTag ("Enemy"));
73 objects = new List<GameObject> (GameObject.FindGameObjectsWithTag ("Object"));
74 distance = 10f;
75 if(GameController.instance != null){
76 GameController.instance.score = 0;
77 prevLevel = GameController.instance.currentLevel;
78 highscore.transform.GetChild (0).transform.GetComponent<Text> ().text = GameController.instance.highscore [GameController.instance.currentLevel - 1].ToString ("N0");
79
80 if(GameController.instance.highscore[GameController.instance.currentLevel - 1] > 0){
81 highscore.gameObject.SetActive (true);
82 }
83
84 }
85
86 }
87
88 void GameIsOnPlay(){
89 /*if (PlayerBullet () == 0) {
90 timeAfterLastShot += Time.deltaTime;
91 camera.isFollowing = false;
92 if (timeAfterLastShot > 2f) {
93 if (AllStopMoving () && AllEnemiesDestroyed ()) {
94 if (!gameFinished) {
95 gameFinished = true;
96 Debug.Log ("Hello World");
97 }
98 } else if (AllStopMoving () && !AllEnemiesDestroyed ()) {
99 if (!gameFinished) {
100 gameFinished = true;
101 Debug.Log ("Hi World");
102 }
103 }
104 }
105
106 }*/
107
108 if(checkGameStatus){
109 timeAfterLastShot += Time.deltaTime;
110 if (timeAfterLastShot > 2f) {
111 if (AllStopMoving () || Time.time - timeSinceStartedShot > 8f) {
112 if (AllEnemiesDestroyed ()) {
113 if (!gameFinished) {
114 gameFinished = true;
115 GameWin ();
116 timeAfterLastShot = 0;
117 checkGameStatus = false;
118 }
119 } else {
120 if (PlayerBullet () == 0) {
121 if (!gameFinished) {
122 gameFinished = true;
123 timeAfterLastShot = 0;
124 checkGameStatus = false;
125 GameLost ();
126 }
127 } else {
128 checkGameStatus = false;
129 camera.isFollowing = false;
130 timeAfterLastShot = 0;
131 }
132 }
133 }
134 }
135
136 }
137
138 }
139
140 void GameWin(){
141 if(GameController.instance != null && MusicController.instance != null){
142 if(GameController.instance.isMusicOn){
143 AudioSource.PlayClipAtPoint (MusicController.instance.winSound, Camera.main.transform.position);
144 }
145
146 if(GameController.instance.score > GameController.instance.highscore[ GameController.instance.currentLevel - 1]){
147 GameController.instance.highscore [ GameController.instance.currentLevel - 1] = GameController.instance.score;
148 }
149
150 highscore.text = GameController.instance.highscore [GameController.instance.currentLevel].ToString ("N0");
151
152 int level = GameController.instance.currentLevel;
153 level++;
154 if(!(level-1 >= GameController.instance.levels.Length)){
155 GameController.instance.levels [level - 1] = true;
156 }
157
158 GameController.instance.Save ();
159 GameController.instance.currentLevel = level;
160 }
161 gameWinPanel.SetActive (true);
162
163 }
164
165 void GameLost(){
166 if(GameController.instance != null && MusicController.instance != null){
167 if(GameController.instance.isMusicOn){
168 AudioSource.PlayClipAtPoint (MusicController.instance.loseSound, Camera.main.transform.position);
169 }
170 }
171 gameOverPanel.SetActive (true);
172 }
173
174
175 public int PlayerBullet(){
176 int playerBullet = GameObject.FindGameObjectWithTag ("Player").transform.GetChild (0).transform.GetComponent<Cannon> ().shot;
177 return playerBullet;
178 }
179
180
181
182 private bool AllEnemiesDestroyed(){
183 return enemies.All(x => x == null);
184 }
185
186
187 private bool AllStopMoving(){
188 foreach (var item in objects.Union(enemies)) {
189 if(item != null && item.GetComponent<Rigidbody2D>().velocity.sqrMagnitude > 0){
190 return false;
191 }
192
193 }
194
195 return true;
196 }
197
198 void DistanceBetweenCannonAndBullet(){
199 GameObject[] bullet = GameObject.FindGameObjectsWithTag ("Player Bullet");
200 foreach (GameObject distanceToBullet in bullet) {
201 if (!distanceToBullet.transform.GetComponent<CannonBullet> ().isIdle) {
202 if (distanceToBullet.transform.position.x - player.position.x > distance) {
203 camera.isFollowing = true;
204 checkGameStatus = true;
205 timeSinceStartedShot = Time.time;
206 TimeSinceShot ();
207 camera.target = distanceToBullet.transform;
208 } else {
209 if(PlayerBullet() == 0){
210 camera.isFollowing = true;
211 checkGameStatus = true;
212 timeSinceStartedShot = Time.time;
213 TimeSinceShot ();
214 camera.target = distanceToBullet.transform;
215 }
216 }
217 }
218 }
219 /*if (GameObject.FindGameObjectWithTag ("Player Bullet") != null) {
220 if (!GameObject.FindGameObjectWithTag ("Player Bullet").transform.GetComponent<CannonBullet> ().isIdle) {
221 Transform distanceToBullet = GameObject.FindGameObjectWithTag ("Player Bullet").transform;
222 if (distanceToBullet.position.x - player.position.x > distance) {
223 camera.isFollowing = true;
224 checkGameStatus = true;
225 TimeSinceShot ();
226 camera.target = distanceToBullet;
227 }
228 }
229
230 }*/
231 }
232
233 void TimeSinceShot(){
234 time += Time.deltaTime;
235 if (time > 3f) {
236 time = 0f;
237 GameObject.FindGameObjectWithTag ("Player Bullet").transform.GetComponent<CannonBullet> ().isIdle = true;
238 }
239
240 }
241
242 public void RestartGame(){
243 SceneManager.LoadScene (SceneManager.GetActiveScene().buildIndex);
244 if(GameController.instance != null){
245 GameController.instance.currentLevel = prevLevel;
246 }
247 }
248
249 public void BackToLevelMenu(){
250 if(GameController.instance != null && MusicController.instance != null){
251 if (GameController.instance.isMusicOn) {
252 MusicController.instance.PlayBgMusic ();
253 } else {
254 MusicController.instance.StopAllSounds ();
255 }
256 }
257 SceneManager.LoadScene ("Level Menu");
258 Time.timeScale = 1;
259 }
260
261 public void ContinueGame(){
262 if (GameController.instance != null) {
263 SceneManager.LoadScene ("Level " + GameController.instance.currentLevel);
264 }
265 }
266
267 public void PauseGame(){
268 if (gameInProgress) {
269 gameInProgress = false;
270 Time.timeScale = 0;
271 pausePanel.SetActive (true);
272 }
273 }
274
275 public void ResumeGame(){
276 Time.timeScale = 1;
277 gameInProgress = true;
278 pausePanel.SetActive (false);
279 }
280
281
282
283
284 }
2 using System.Collections.Generic;
3 using UnityEngine;
4 using System.Linq;
5 using UnityEngine.UI;
6 using UnityEngine.SceneManagement;
7
8 public class GameplayController : MonoBehaviour {
9
10 public static GameplayController instance;
11
12 public bool gameInProgress;
13 public Transform player;
14 public CameraFollow camera;
15 public Text scoreText, shotText, highscore;
16 public GameObject gameOverPanel, gameWinPanel, pausePanel;
17
18 [HideInInspector]
19 public bool lastShot;
20
21 private bool gameFinished, checkGameStatus;
22 private List<GameObject> enemies;
23 private List<GameObject> objects;
24 private float timeAfterLastShot, distance, time, timeSinceStartedShot;
25 private int prevLevel;
26
27 void Awake(){
28 CreateInstance ();
29 }
30
31 // Use this for initialization
32 void Start () {
33 InitializeVariables ();
34
35 if (GameController.instance != null && MusicController.instance != null) {
36 if (GameController.instance.isMusicOn) {
37 MusicController.instance.GameplaySound ();
38 } else {
39 MusicController.instance.StopAllSounds ();
40 }
41 }
42
43 }
44
45 // Update is called once per frame
46 void Update () {
47 if (gameInProgress) {
48 GameIsOnPlay ();
49 DistanceBetweenCannonAndBullet ();
50 }
51
52
53 if(GameController.instance != null){
54 UpdateGameplayController ();
55 }
56
57 }
58
59 void CreateInstance(){
60 if(instance == null){
61 instance = this;
62 }
63 }
64
65 void UpdateGameplayController(){
66 scoreText.text = GameController.instance.score.ToString("N0");
67 shotText.text = "X" + PlayerBullet ();
68 }
69
70 void InitializeVariables(){
71 gameInProgress = true;
72 enemies = new List<GameObject> (GameObject.FindGameObjectsWithTag ("Enemy"));
73 objects = new List<GameObject> (GameObject.FindGameObjectsWithTag ("Object"));
74 distance = 10f;
75 if(GameController.instance != null){
76 GameController.instance.score = 0;
77 prevLevel = GameController.instance.currentLevel;
78 highscore.transform.GetChild (0).transform.GetComponent<Text> ().text = GameController.instance.highscore [GameController.instance.currentLevel - 1].ToString ("N0");
79
80 if(GameController.instance.highscore[GameController.instance.currentLevel - 1] > 0){
81 highscore.gameObject.SetActive (true);
82 }
83
84 }
85
86 }
87
88 void GameIsOnPlay(){
89 /*if (PlayerBullet () == 0) {
90 timeAfterLastShot += Time.deltaTime;
91 camera.isFollowing = false;
92 if (timeAfterLastShot > 2f) {
93 if (AllStopMoving () && AllEnemiesDestroyed ()) {
94 if (!gameFinished) {
95 gameFinished = true;
96 Debug.Log ("Hello World");
97 }
98 } else if (AllStopMoving () && !AllEnemiesDestroyed ()) {
99 if (!gameFinished) {
100 gameFinished = true;
101 Debug.Log ("Hi World");
102 }
103 }
104 }
105
106 }*/
107
108 if(checkGameStatus){
109 timeAfterLastShot += Time.deltaTime;
110 if (timeAfterLastShot > 2f) {
111 if (AllStopMoving () || Time.time - timeSinceStartedShot > 8f) {
112 if (AllEnemiesDestroyed ()) {
113 if (!gameFinished) {
114 gameFinished = true;
115 GameWin ();
116 timeAfterLastShot = 0;
117 checkGameStatus = false;
118 }
119 } else {
120 if (PlayerBullet () == 0) {
121 if (!gameFinished) {
122 gameFinished = true;
123 timeAfterLastShot = 0;
124 checkGameStatus = false;
125 GameLost ();
126 }
127 } else {
128 checkGameStatus = false;
129 camera.isFollowing = false;
130 timeAfterLastShot = 0;
131 }
132 }
133 }
134 }
135
136 }
137
138 }
139
140 void GameWin(){
141 if(GameController.instance != null && MusicController.instance != null){
142 if(GameController.instance.isMusicOn){
143 AudioSource.PlayClipAtPoint (MusicController.instance.winSound, Camera.main.transform.position);
144 }
145
146 if(GameController.instance.score > GameController.instance.highscore[ GameController.instance.currentLevel - 1]){
147 GameController.instance.highscore [ GameController.instance.currentLevel - 1] = GameController.instance.score;
148 }
149
150 highscore.text = GameController.instance.highscore [GameController.instance.currentLevel].ToString ("N0");
151
152 int level = GameController.instance.currentLevel;
153 level++;
154 if(!(level-1 >= GameController.instance.levels.Length)){
155 GameController.instance.levels [level - 1] = true;
156 }
157
158 GameController.instance.Save ();
159 GameController.instance.currentLevel = level;
160 }
161 gameWinPanel.SetActive (true);
162
163 }
164
165 void GameLost(){
166 if(GameController.instance != null && MusicController.instance != null){
167 if(GameController.instance.isMusicOn){
168 AudioSource.PlayClipAtPoint (MusicController.instance.loseSound, Camera.main.transform.position);
169 }
170 }
171 gameOverPanel.SetActive (true);
172 }
173
174
175 public int PlayerBullet(){
176 int playerBullet = GameObject.FindGameObjectWithTag ("Player").transform.GetChild (0).transform.GetComponent<Cannon> ().shot;
177 return playerBullet;
178 }
179
180
181
182 private bool AllEnemiesDestroyed(){
183 return enemies.All(x => x == null);
184 }
185
186
187 private bool AllStopMoving(){
188 foreach (var item in objects.Union(enemies)) {
189 if(item != null && item.GetComponent<Rigidbody2D>().velocity.sqrMagnitude > 0){
190 return false;
191 }
192
193 }
194
195 return true;
196 }
197
198 void DistanceBetweenCannonAndBullet(){
199 GameObject[] bullet = GameObject.FindGameObjectsWithTag ("Player Bullet");
200 foreach (GameObject distanceToBullet in bullet) {
201 if (!distanceToBullet.transform.GetComponent<CannonBullet> ().isIdle) {
202 if (distanceToBullet.transform.position.x - player.position.x > distance) {
203 camera.isFollowing = true;
204 checkGameStatus = true;
205 timeSinceStartedShot = Time.time;
206 TimeSinceShot ();
207 camera.target = distanceToBullet.transform;
208 } else {
209 if(PlayerBullet() == 0){
210 camera.isFollowing = true;
211 checkGameStatus = true;
212 timeSinceStartedShot = Time.time;
213 TimeSinceShot ();
214 camera.target = distanceToBullet.transform;
215 }
216 }
217 }
218 }
219 /*if (GameObject.FindGameObjectWithTag ("Player Bullet") != null) {
220 if (!GameObject.FindGameObjectWithTag ("Player Bullet").transform.GetComponent<CannonBullet> ().isIdle) {
221 Transform distanceToBullet = GameObject.FindGameObjectWithTag ("Player Bullet").transform;
222 if (distanceToBullet.position.x - player.position.x > distance) {
223 camera.isFollowing = true;
224 checkGameStatus = true;
225 TimeSinceShot ();
226 camera.target = distanceToBullet;
227 }
228 }
229
230 }*/
231 }
232
233 void TimeSinceShot(){
234 time += Time.deltaTime;
235 if (time > 3f) {
236 time = 0f;
237 GameObject.FindGameObjectWithTag ("Player Bullet").transform.GetComponent<CannonBullet> ().isIdle = true;
238 }
239
240 }
241
242 public void RestartGame(){
243 SceneManager.LoadScene (SceneManager.GetActiveScene().buildIndex);
244 if(GameController.instance != null){
245 GameController.instance.currentLevel = prevLevel;
246 }
247 }
248
249 public void BackToLevelMenu(){
250 if(GameController.instance != null && MusicController.instance != null){
251 if (GameController.instance.isMusicOn) {
252 MusicController.instance.PlayBgMusic ();
253 } else {
254 MusicController.instance.StopAllSounds ();
255 }
256 }
257 SceneManager.LoadScene ("Level Menu");
258 Time.timeScale = 1;
259 }
260
261 public void ContinueGame(){
262 if (GameController.instance != null) {
263 SceneManager.LoadScene ("Level " + GameController.instance.currentLevel);
264 }
265 }
266
267 public void PauseGame(){
268 if (gameInProgress) {
269 gameInProgress = false;
270 Time.timeScale = 0;
271 pausePanel.SetActive (true);
272 }
273 }
274
275 public void ResumeGame(){
276 Time.timeScale = 1;
277 gameInProgress = true;
278 pausePanel.SetActive (false);
279 }
280
281
282
283
284 }
Use this for initialization
Update is called once per frame